"""
项目初始化脚本
"""
import os
import sys
import subprocess
import shutil
from pathlib import Path

def create_directory_structure():
    """创建项目目录结构"""
    directories = [
        "logs",
        "config",
        "models",
        "src",
        "src/auth",
        "src/metadata", 
        "src/ai",
        "src/test_executor",
        "src/report",
        "utils",
        "tests",
        "data",
        "temp"
    ]
    
    for directory in directories:
        Path(directory).mkdir(parents=True, exist_ok=True)
        print(f"✓ 创建目录: {directory}")

def create_env_file():
    """创建环境变量文件"""
    env_file = ".env"
    if os.path.exists(env_file):
        print(f"✓ 环境变量文件已存在: {env_file}")
        return
    
    if os.path.exists("config.env.template"):
        shutil.copy("config.env.template", env_file)
        print(f"✓ 创建环境变量文件: {env_file}")
        print("  请根据实际情况修改.env文件中的配置")
    else:
        print("✗ 未找到配置模板文件")

def create_init_files():
    """创建__init__.py文件"""
    init_files = [
        "config/__init__.py",
        "models/__init__.py",
        "src/__init__.py",
        "src/auth/__init__.py",
        "src/metadata/__init__.py",
        "src/ai/__init__.py",
        "src/test_executor/__init__.py",
        "src/report/__init__.py",
        "utils/__init__.py"
    ]
    
    for init_file in init_files:
        if not os.path.exists(init_file):
            Path(init_file).touch()
            print(f"✓ 创建__init__.py: {init_file}")

def install_dependencies():
    """安装项目依赖"""
    print("开始安装项目依赖...")
    try:
        result = subprocess.run([
            sys.executable, "-m", "pip", "install", "-r", "requirements.txt"
        ], check=True, capture_output=True, text=True)
        print("✓ 依赖安装成功")
    except subprocess.CalledProcessError as e:
        print(f"✗ 依赖安装失败: {e}")
        print("请手动执行: pip install -r requirements.txt")

def check_mysql_connection():
    """检查MySQL连接"""
    try:
        import pymysql
        print("✓ MySQL驱动可用")
        # 这里可以添加实际的数据库连接测试
        print("  请确保MySQL数据库服务正在运行")
        print("  请确保.env文件中的数据库配置正确")
    except ImportError:
        print("✗ MySQL驱动不可用，请检查pymysql是否安装")

def create_sample_config():
    """创建示例配置文件"""
    sample_config = """
# 示例配置文件
# 复制此文件为 .env 并根据实际情况修改

# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=api_test

# 认证配置
AUTH_URL=http://your-auth-server.com/auth/token
AUTH_USERNAME=your_username
AUTH_PASSWORD=your_password

# 元数据接口配置
METADATA_URL=http://your-api-server.com/metadata

# AI配置
OPENAI_API_KEY=your_openai_api_key
OPENAI_MODEL=gpt-3.5-turbo

# 日志配置
LOG_LEVEL=INFO
LOG_FILE=logs/app.log

# 测试配置
MAX_RETRY_COUNT=3
REQUEST_TIMEOUT=30
""".strip()
    
    if not os.path.exists(".env"):
        with open(".env", "w", encoding="utf-8") as f:
            f.write(sample_config)
        print("✓ 创建示例配置文件: .env")
    else:
        print("✓ 配置文件已存在")

def main():
    """主初始化函数"""
    print("开始初始化API自动化测试项目...")
    print("=" * 50)
    
    # 1. 创建目录结构
    print("1. 创建项目目录结构")
    create_directory_structure()
    
    # 2. 创建__init__.py文件
    print("\n2. 创建Python包文件")
    create_init_files()
    
    # 3. 创建环境变量文件
    print("\n3. 创建环境变量文件")
    create_sample_config()
    
    # 4. 安装依赖
    print("\n4. 安装项目依赖")
    install_dependencies()
    
    # 5. 检查MySQL连接
    print("\n5. 检查MySQL驱动")
    check_mysql_connection()
    
    print("\n" + "=" * 50)
    print("项目初始化完成！")
    print("\n后续步骤：")
    print("1. 修改 .env 文件中的配置信息")
    print("2. 确保MySQL数据库服务正在运行")
    print("3. 运行 python main.py 启动系统")
    print("4. 使用系统提供的API进行测试")

if __name__ == "__main__":
    main() 